home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / awt / FontConfiguration.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  23.4 KB  |  1,518 lines

  1. package sun.awt;
  2.  
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.OutputStream;
  10. import java.nio.charset.Charset;
  11. import java.nio.charset.CharsetEncoder;
  12. import java.security.AccessController;
  13. import java.util.HashMap;
  14. import java.util.HashSet;
  15. import java.util.Hashtable;
  16. import java.util.Locale;
  17. import java.util.Map;
  18. import java.util.Set;
  19. import java.util.Vector;
  20. import java.util.logging.Logger;
  21. import sun.font.CompositeFontDescriptor;
  22. import sun.font.FontManager;
  23. import sun.java2d.SunGraphicsEnvironment;
  24.  
  25. public abstract class FontConfiguration {
  26.    protected static String osVersion;
  27.    protected static String osName;
  28.    protected static String encoding;
  29.    protected static Locale startupLocale = null;
  30.    protected static Hashtable localeMap = null;
  31.    private static FontConfiguration fontConfig;
  32.    private static Logger logger;
  33.    protected static boolean isProperties = true;
  34.    protected SunGraphicsEnvironment environment;
  35.    protected boolean preferLocaleFonts;
  36.    protected boolean preferPropFonts;
  37.    private static short stringIDNum;
  38.    private static short[] stringIDs;
  39.    private static StringBuilder stringTable;
  40.    public static boolean verbose;
  41.    private short initELC = -1;
  42.    private Locale initLocale;
  43.    private String initEncoding;
  44.    private String alphabeticSuffix;
  45.    private short[][][] compFontNameIDs = new short[5][4][];
  46.    private int[][][] compExclusions = new int[5][][];
  47.    private int[] compCoreNum = new int[5];
  48.    private Set<Short> coreFontNameIDs = new HashSet();
  49.    private Set<Short> fallbackFontNameIDs = new HashSet();
  50.    protected static final int NUM_FONTS = 5;
  51.    protected static final int NUM_STYLES = 4;
  52.    private static final String[] fontNames = new String[]{"serif", "sansserif", "monospaced", "dialog", "dialoginput"};
  53.    private static final String[] publicFontNames = new String[]{"Serif", "SansSerif", "Monospaced", "Dialog", "DialogInput"};
  54.    private static final String[] styleNames = new String[]{"plain", "bold", "italic", "bolditalic"};
  55.    private static String[] installedFallbackFontFiles = null;
  56.    protected HashMap reorderMap = null;
  57.    private Hashtable charsetRegistry = new Hashtable(5);
  58.    private FontDescriptor[][][] fontDescriptors = new FontDescriptor[5][4][];
  59.    HashMap<String, Boolean> existsMap;
  60.    private int numCoreFonts = -1;
  61.    private String[] componentFonts = null;
  62.    HashMap<String, String> filenamesMap = new HashMap();
  63.    HashSet<String> coreFontFileNames = new HashSet();
  64.    private static final int HEAD_LENGTH = 20;
  65.    private static final int INDEX_scriptIDs = 0;
  66.    private static final int INDEX_scriptFonts = 1;
  67.    private static final int INDEX_elcIDs = 2;
  68.    private static final int INDEX_sequences = 3;
  69.    private static final int INDEX_fontfileNameIDs = 4;
  70.    private static final int INDEX_componentFontNameIDs = 5;
  71.    private static final int INDEX_filenames = 6;
  72.    private static final int INDEX_awtfontpaths = 7;
  73.    private static final int INDEX_exclusions = 8;
  74.    private static final int INDEX_proportionals = 9;
  75.    private static final int INDEX_scriptFontsMotif = 10;
  76.    private static final int INDEX_alphabeticSuffix = 11;
  77.    private static final int INDEX_stringIDs = 12;
  78.    private static final int INDEX_stringTable = 13;
  79.    private static final int INDEX_TABLEEND = 14;
  80.    private static final int INDEX_fallbackScripts = 15;
  81.    private static final int INDEX_appendedfontpath = 16;
  82.    private static final int INDEX_version = 17;
  83.    private static short[] head;
  84.    private static short[] table_scriptIDs;
  85.    private static short[] table_scriptFonts;
  86.    private static short[] table_elcIDs;
  87.    private static short[] table_sequences;
  88.    private static short[] table_fontfileNameIDs;
  89.    private static short[] table_componentFontNameIDs;
  90.    private static short[] table_filenames;
  91.    protected static short[] table_awtfontpaths;
  92.    private static short[] table_exclusions;
  93.    private static short[] table_proportionals;
  94.    private static short[] table_scriptFontsMotif;
  95.    private static short[] table_alphabeticSuffix;
  96.    private static short[] table_stringIDs;
  97.    private static char[] table_stringTable;
  98.    private HashMap<String, Short> reorderScripts;
  99.    private static String[] stringCache;
  100.    private static final int[] EMPTY_INT_ARRAY = new int[0];
  101.    private static final String[] EMPTY_STRING_ARRAY = new String[0];
  102.    private static final short[] EMPTY_SHORT_ARRAY = new short[0];
  103.    private static final String UNDEFINED_COMPONENT_FONT = "unknown";
  104.  
  105.    public FontConfiguration(SunGraphicsEnvironment var1) {
  106.       if (SunGraphicsEnvironment.debugFonts && logger == null) {
  107.          logger = Logger.getLogger("sun.awt.FontConfiguration");
  108.       }
  109.  
  110.       this.environment = var1;
  111.       this.preferLocaleFonts = false;
  112.       this.preferPropFonts = false;
  113.       this.setOsNameAndVersion();
  114.       this.setEncoding();
  115.       fontConfig = this;
  116.       this.readFontConfigFile();
  117.       this.initFontConfig();
  118.    }
  119.  
  120.    public FontConfiguration(SunGraphicsEnvironment var1, boolean var2, boolean var3) {
  121.       this.environment = var1;
  122.       this.preferLocaleFonts = var2;
  123.       this.preferPropFonts = var3;
  124.       this.initFontConfig();
  125.    }
  126.  
  127.    protected void setOsNameAndVersion() {
  128.       osName = System.getProperty("os.name");
  129.       osVersion = System.getProperty("os.version");
  130.    }
  131.  
  132.    private void setEncoding() {
  133.       encoding = Charset.defaultCharset().name();
  134.       startupLocale = SunToolkit.getStartupLocale();
  135.    }
  136.  
  137.    private void readFontConfigFile() {
  138.       Object var1 = null;
  139.       String var2 = System.getProperty("java.home");
  140.       if (var2 == null) {
  141.          throw new Error("java.home property not set");
  142.       } else {
  143.          String var3 = var2 + File.separator + "lib";
  144.          String var4 = System.getProperty("sun.awt.fontconfig");
  145.          File var7;
  146.          if (var4 != null) {
  147.             var7 = new File(var4);
  148.          } else {
  149.             var7 = this.findFontConfigFile(var3);
  150.          }
  151.  
  152.          this.getInstalledFallbackFonts(var3);
  153.          if (var7 != null) {
  154.             try {
  155.                FileInputStream var5 = new FileInputStream(var7.getPath());
  156.                if (isProperties) {
  157.                   loadProperties(var5);
  158.                } else {
  159.                   loadBinary(var5);
  160.                }
  161.  
  162.                var5.close();
  163.                if (SunGraphicsEnvironment.debugFonts) {
  164.                   logger.config("Read logical font configuration from " + var7);
  165.                }
  166.             } catch (IOException var6) {
  167.                if (SunGraphicsEnvironment.debugFonts) {
  168.                   logger.config("Failed to read logical font configuration from " + var7);
  169.                }
  170.             }
  171.          }
  172.  
  173.          String var8 = this.getVersion();
  174.          if (!"1".equals(var8) && SunGraphicsEnvironment.debugFonts) {
  175.             logger.config("Unsupported fontconfig version: " + var8);
  176.          }
  177.  
  178.       }
  179.    }
  180.  
  181.    private void getInstalledFallbackFonts(String var1) {
  182.       String var2 = var1 + File.separator + "fonts" + File.separator + "fallback";
  183.       File var3 = new File(var2);
  184.       if (var3.exists() && var3.isDirectory()) {
  185.          String[] var4 = var3.list(SunGraphicsEnvironment.ttFilter);
  186.          String[] var5 = var3.list(SunGraphicsEnvironment.t1Filter);
  187.          int var6 = var4 == null ? 0 : var4.length;
  188.          int var7 = var5 == null ? 0 : var5.length;
  189.          int var8 = var6 + var7;
  190.          if (var6 + var7 == 0) {
  191.             return;
  192.          }
  193.  
  194.          installedFallbackFontFiles = new String[var8];
  195.  
  196.          for(int var9 = 0; var9 < var6; ++var9) {
  197.             installedFallbackFontFiles[var9] = var3 + File.separator + var4[var9];
  198.          }
  199.  
  200.          for(int var10 = 0; var10 < var7; ++var10) {
  201.             installedFallbackFontFiles[var10 + var6] = var3 + File.separator + var5[var10];
  202.          }
  203.  
  204.          this.environment.registerFontsInDir(var2);
  205.       }
  206.  
  207.    }
  208.  
  209.    private File findImpl(String var1) {
  210.       File var2 = new File(var1 + ".properties");
  211.       if (var2.canRead()) {
  212.          isProperties = true;
  213.          return var2;
  214.       } else {
  215.          var2 = new File(var1 + ".bfc");
  216.          if (var2.canRead()) {
  217.             isProperties = false;
  218.             return var2;
  219.          } else {
  220.             return null;
  221.          }
  222.       }
  223.    }
  224.  
  225.    private File findFontConfigFile(String var1) {
  226.       String var2 = var1 + File.separator + "fontconfig";
  227.       if (osVersion != null && osName != null) {
  228.          File var3 = this.findImpl(var2 + "." + osName + "." + osVersion);
  229.          if (var3 != null) {
  230.             return var3;
  231.          }
  232.       }
  233.  
  234.       if (osName != null) {
  235.          File var4 = this.findImpl(var2 + "." + osName);
  236.          if (var4 != null) {
  237.             return var4;
  238.          }
  239.       }
  240.  
  241.       if (osVersion != null) {
  242.          File var5 = this.findImpl(var2 + "." + osVersion);
  243.          if (var5 != null) {
  244.             return var5;
  245.          }
  246.       }
  247.  
  248.       File var6 = this.findImpl(var2);
  249.       return var6 != null ? var6 : null;
  250.    }
  251.  
  252.    public static void loadBinary(InputStream var0) throws IOException {
  253.       DataInputStream var1 = new DataInputStream(var0);
  254.       head = readShortTable(var1, 20);
  255.       int[] var2 = new int[14];
  256.  
  257.       for(int var3 = 0; var3 < 14; ++var3) {
  258.          var2[var3] = head[var3 + 1] - head[var3];
  259.       }
  260.  
  261.       table_scriptIDs = readShortTable(var1, var2[0]);
  262.       table_scriptFonts = readShortTable(var1, var2[1]);
  263.       table_elcIDs = readShortTable(var1, var2[2]);
  264.       table_sequences = readShortTable(var1, var2[3]);
  265.       table_fontfileNameIDs = readShortTable(var1, var2[4]);
  266.       table_componentFontNameIDs = readShortTable(var1, var2[5]);
  267.       table_filenames = readShortTable(var1, var2[6]);
  268.       table_awtfontpaths = readShortTable(var1, var2[7]);
  269.       table_exclusions = readShortTable(var1, var2[8]);
  270.       table_proportionals = readShortTable(var1, var2[9]);
  271.       table_scriptFontsMotif = readShortTable(var1, var2[10]);
  272.       table_alphabeticSuffix = readShortTable(var1, var2[11]);
  273.       table_stringIDs = readShortTable(var1, var2[12]);
  274.       stringCache = new String[table_stringIDs.length + 1];
  275.       int var7 = var2[13];
  276.       byte[] var4 = new byte[var7 * 2];
  277.       table_stringTable = new char[var7];
  278.       var1.read(var4);
  279.       int var5 = 0;
  280.  
  281.       for(int var6 = 0; var5 < var7; table_stringTable[var5++] = (char)(var4[var6++] << 8 | var4[var6++] & 255)) {
  282.       }
  283.  
  284.       if (verbose) {
  285.          dump();
  286.       }
  287.  
  288.    }
  289.  
  290.    public static void saveBinary(OutputStream var0) throws IOException {
  291.       DataOutputStream var1 = new DataOutputStream(var0);
  292.       writeShortTable(var1, head);
  293.       writeShortTable(var1, table_scriptIDs);
  294.       writeShortTable(var1, table_scriptFonts);
  295.       writeShortTable(var1, table_elcIDs);
  296.       writeShortTable(var1, table_sequences);
  297.       writeShortTable(var1, table_fontfileNameIDs);
  298.       writeShortTable(var1, table_componentFontNameIDs);
  299.       writeShortTable(var1, table_filenames);
  300.       writeShortTable(var1, table_awtfontpaths);
  301.       writeShortTable(var1, table_exclusions);
  302.       writeShortTable(var1, table_proportionals);
  303.       writeShortTable(var1, table_scriptFontsMotif);
  304.       writeShortTable(var1, table_alphabeticSuffix);
  305.       writeShortTable(var1, table_stringIDs);
  306.       var1.writeChars(new String(table_stringTable));
  307.       var0.close();
  308.       if (verbose) {
  309.          dump();
  310.       }
  311.  
  312.       sanityCheck();
  313.    }
  314.  
  315.    public static void loadProperties(InputStream var0) throws IOException {
  316.       stringIDNum = 1;
  317.       stringIDs = new short[1000];
  318.       stringTable = new StringBuilder(4096);
  319.       if (verbose && logger == null) {
  320.          logger = Logger.getLogger("sun.awt.FontConfiguration");
  321.       }
  322.  
  323.       (new PropertiesHandler()).load(var0);
  324.       stringIDs = null;
  325.       stringTable = null;
  326.    }
  327.  
  328.    private void initFontConfig() {
  329.       this.initLocale = startupLocale;
  330.       this.initEncoding = encoding;
  331.       if (this.preferLocaleFonts && !willReorderForStartupLocale()) {
  332.          this.preferLocaleFonts = false;
  333.       }
  334.  
  335.       this.initELC = this.getInitELC();
  336.       this.initAllComponentFonts();
  337.    }
  338.  
  339.    private short getInitELC() {
  340.       if (this.initELC != -1) {
  341.          return this.initELC;
  342.       } else {
  343.          HashMap var1 = new HashMap();
  344.  
  345.          for(int var2 = 0; var2 < table_elcIDs.length; ++var2) {
  346.             var1.put(getString(table_elcIDs[var2]), var2);
  347.          }
  348.  
  349.          String var6 = this.initLocale.getLanguage();
  350.          String var3 = this.initLocale.getCountry();
  351.          String var4;
  352.          boolean var10000 = var1.containsKey(var4 = this.initEncoding + "." + var6 + "." + var3);
  353.          if (!var10000 && !var1.containsKey(var4 = this.initEncoding + "." + var6) && !var1.containsKey(var4 = this.initEncoding)) {
  354.             this.initELC = ((Integer)var1.get("NULL.NULL.NULL")).shortValue();
  355.          } else {
  356.             this.initELC = ((Integer)var1.get(var4)).shortValue();
  357.          }
  358.  
  359.          for(int var5 = 0; var5 < table_alphabeticSuffix.length; var5 += 2) {
  360.             if (this.initELC == table_alphabeticSuffix[var5]) {
  361.                this.alphabeticSuffix = getString(table_alphabeticSuffix[var5 + 1]);
  362.                return this.initELC;
  363.             }
  364.          }
  365.  
  366.          return this.initELC;
  367.       }
  368.    }
  369.  
  370.    private void initAllComponentFonts() {
  371.       short[] var1 = getFallbackScripts();
  372.  
  373.       for(int var2 = 0; var2 < 5; ++var2) {
  374.          short[] var3 = this.getCoreScripts(var2);
  375.          this.compCoreNum[var2] = var3.length;
  376.          int[][] var4 = new int[var3.length][];
  377.  
  378.          for(int var5 = 0; var5 < var3.length; ++var5) {
  379.             var4[var5] = getExclusionRanges(var3[var5]);
  380.          }
  381.  
  382.          this.compExclusions[var2] = var4;
  383.  
  384.          for(int var10 = 0; var10 < 4; ++var10) {
  385.             short[] var7 = new short[var3.length + var1.length];
  386.  
  387.             int var6;
  388.             for(var6 = 0; var6 < var3.length; ++var6) {
  389.                var7[var6] = getComponentFontID(var3[var6], var2, var10);
  390.                if (this.preferLocaleFonts && localeMap != null && FontManager.usingAlternateFontforJALocales()) {
  391.                   var7[var6] = this.remapLocaleMap(var2, var10, var3[var6], var7[var6]);
  392.                }
  393.  
  394.                if (this.preferPropFonts) {
  395.                   var7[var6] = this.remapProportional(var2, var7[var6]);
  396.                }
  397.  
  398.                this.coreFontNameIDs.add(var7[var6]);
  399.             }
  400.  
  401.             for(int var8 = 0; var8 < var1.length; ++var8) {
  402.                short var9 = getComponentFontID(var1[var8], var2, var10);
  403.                if (this.preferLocaleFonts && localeMap != null && FontManager.usingAlternateFontforJALocales()) {
  404.                   var9 = this.remapLocaleMap(var2, var10, var1[var8], var9);
  405.                }
  406.  
  407.                if (this.preferPropFonts) {
  408.                   var9 = this.remapProportional(var2, var9);
  409.                }
  410.  
  411.                if (!contains(var7, var9, var6)) {
  412.                   this.fallbackFontNameIDs.add(var9);
  413.                   var7[var6++] = var9;
  414.                }
  415.             }
  416.  
  417.             if (var6 < var7.length) {
  418.                short[] var11 = new short[var6];
  419.                System.arraycopy(var7, 0, var11, 0, var6);
  420.                var7 = var11;
  421.             }
  422.  
  423.             this.compFontNameIDs[var2][var10] = var7;
  424.          }
  425.       }
  426.  
  427.    }
  428.  
  429.    private short remapLocaleMap(int var1, int var2, short var3, short var4) {
  430.       String var5 = getString(table_scriptIDs[var3]);
  431.       String var6 = (String)localeMap.get(var5);
  432.       if (var6 == null) {
  433.          String var7 = fontNames[var1];
  434.          String var8 = styleNames[var2];
  435.          var6 = (String)localeMap.get(var7 + "." + var8 + "." + var5);
  436.       }
  437.  
  438.       if (var6 == null) {
  439.          return var4;
  440.       } else {
  441.          for(int var9 = 0; var9 < table_componentFontNameIDs.length; ++var9) {
  442.             String var10 = getString(table_componentFontNameIDs[var9]);
  443.             if (var6.equalsIgnoreCase(var10)) {
  444.                var4 = (short)var9;
  445.                break;
  446.             }
  447.          }
  448.  
  449.          return var4;
  450.       }
  451.    }
  452.  
  453.    public static boolean hasMonoToPropMap() {
  454.       return table_proportionals != null && table_proportionals.length != 0;
  455.    }
  456.  
  457.    private short remapProportional(int var1, short var2) {
  458.       if (this.preferPropFonts && table_proportionals.length != 0 && var1 != 2 && var1 != 4) {
  459.          for(int var3 = 0; var3 < table_proportionals.length; var3 += 2) {
  460.             if (table_proportionals[var3] == var2) {
  461.                return table_proportionals[var3 + 1];
  462.             }
  463.          }
  464.       }
  465.  
  466.       return var2;
  467.    }
  468.  
  469.    public static boolean isLogicalFontFamilyName(String var0) {
  470.       return isLogicalFontFamilyNameLC(var0.toLowerCase(Locale.ENGLISH));
  471.    }
  472.  
  473.    public static boolean isLogicalFontFamilyNameLC(String var0) {
  474.       for(int var1 = 0; var1 < fontNames.length; ++var1) {
  475.          if (var0.equals(fontNames[var1])) {
  476.             return true;
  477.          }
  478.       }
  479.  
  480.       return false;
  481.    }
  482.  
  483.    private static boolean isLogicalFontStyleName(String var0) {
  484.       for(int var1 = 0; var1 < styleNames.length; ++var1) {
  485.          if (var0.equals(styleNames[var1])) {
  486.             return true;
  487.          }
  488.       }
  489.  
  490.       return false;
  491.    }
  492.  
  493.    public static boolean isLogicalFontFaceName(String var0) {
  494.       return isLogicalFontFaceNameLC(var0.toLowerCase(Locale.ENGLISH));
  495.    }
  496.  
  497.    public static boolean isLogicalFontFaceNameLC(String var0) {
  498.       int var1 = var0.indexOf(46);
  499.       if (var1 < 0) {
  500.          return isLogicalFontFamilyName(var0);
  501.       } else {
  502.          String var2 = var0.substring(0, var1);
  503.          String var3 = var0.substring(var1 + 1);
  504.          return isLogicalFontFamilyName(var2) && isLogicalFontStyleName(var3);
  505.       }
  506.    }
  507.  
  508.    protected static int getFontIndex(String var0) {
  509.       return getArrayIndex(fontNames, var0);
  510.    }
  511.  
  512.    protected static int getStyleIndex(String var0) {
  513.       return getArrayIndex(styleNames, var0);
  514.    }
  515.  
  516.    private static int getArrayIndex(String[] var0, String var1) {
  517.       for(int var2 = 0; var2 < var0.length; ++var2) {
  518.          if (var1.equals(var0[var2])) {
  519.             return var2;
  520.          }
  521.       }
  522.  
  523.       assert false;
  524.  
  525.       return 0;
  526.    }
  527.  
  528.    protected static int getStyleIndex(int var0) {
  529.       switch (var0) {
  530.          case 0:
  531.             return 0;
  532.          case 1:
  533.             return 1;
  534.          case 2:
  535.             return 2;
  536.          case 3:
  537.             return 3;
  538.          default:
  539.             return 0;
  540.       }
  541.    }
  542.  
  543.    protected static String getFontName(int var0) {
  544.       return fontNames[var0];
  545.    }
  546.  
  547.    protected static String getStyleName(int var0) {
  548.       return styleNames[var0];
  549.    }
  550.  
  551.    public static String getLogicalFontFaceName(String var0, int var1) {
  552.       assert isLogicalFontFamilyName(var0);
  553.  
  554.       return var0.toLowerCase(Locale.ENGLISH) + "." + getStyleString(var1);
  555.    }
  556.  
  557.    public static String getStyleString(int var0) {
  558.       return getStyleName(getStyleIndex(var0));
  559.    }
  560.  
  561.    public abstract String getFallbackFamilyName(String var1, String var2);
  562.  
  563.    protected String getCompatibilityFamilyName(String var1) {
  564.       var1 = var1.toLowerCase(Locale.ENGLISH);
  565.       if (var1.equals("timesroman")) {
  566.          return "serif";
  567.       } else if (var1.equals("helvetica")) {
  568.          return "sansserif";
  569.       } else {
  570.          return var1.equals("courier") ? "monospaced" : null;
  571.       }
  572.    }
  573.  
  574.    protected String mapFileName(String var1) {
  575.       return var1;
  576.    }
  577.  
  578.    protected abstract void initReorderMap();
  579.  
  580.    private void shuffle(String[] var1, int var2, int var3) {
  581.       if (var3 < var2) {
  582.          String var4 = var1[var2];
  583.  
  584.          for(int var5 = var2; var5 > var3; --var5) {
  585.             var1[var5] = var1[var5 - 1];
  586.          }
  587.  
  588.          var1[var3] = var4;
  589.       }
  590.    }
  591.  
  592.    public static boolean willReorderForStartupLocale() {
  593.       return getReorderSequence() != null;
  594.    }
  595.  
  596.    private static Object getReorderSequence() {
  597.       if (fontConfig.reorderMap == null) {
  598.          fontConfig.initReorderMap();
  599.       }
  600.  
  601.       HashMap var0 = fontConfig.reorderMap;
  602.       String var1 = startupLocale.getLanguage();
  603.       String var2 = startupLocale.getCountry();
  604.       Object var3 = var0.get(encoding + "." + var1 + "." + var2);
  605.       if (var3 == null) {
  606.          var3 = var0.get(encoding + "." + var1);
  607.       }
  608.  
  609.       if (var3 == null) {
  610.          var3 = var0.get(encoding);
  611.       }
  612.  
  613.       return var3;
  614.    }
  615.  
  616.    private void reorderSequenceForLocale(String[] var1) {
  617.       Object var2 = getReorderSequence();
  618.       if (var2 instanceof String) {
  619.          for(int var3 = 0; var3 < var1.length; ++var3) {
  620.             if (var1[var3].equals(var2)) {
  621.                this.shuffle(var1, var3, 0);
  622.                return;
  623.             }
  624.          }
  625.       } else if (var2 instanceof String[]) {
  626.          String[] var6 = (String[])var2;
  627.  
  628.          for(int var4 = 0; var4 < var6.length; ++var4) {
  629.             for(int var5 = 0; var5 < var1.length; ++var5) {
  630.                if (var1[var5].equals(var6[var4])) {
  631.                   this.shuffle(var1, var5, var4);
  632.                }
  633.             }
  634.          }
  635.       }
  636.  
  637.    }
  638.  
  639.    private static Vector splitSequence(String var0) {
  640.       Vector var1 = new Vector();
  641.  
  642.       int var2;
  643.       int var3;
  644.       for(var2 = 0; (var3 = var0.indexOf(44, var2)) >= 0; var2 = var3 + 1) {
  645.          var1.add(var0.substring(var2, var3));
  646.       }
  647.  
  648.       if (var0.length() > var2) {
  649.          var1.add(var0.substring(var2, var0.length()));
  650.       }
  651.  
  652.       return var1;
  653.    }
  654.  
  655.    protected String[] split(String var1) {
  656.       Vector var2 = splitSequence(var1);
  657.       return (String[])var2.toArray(new String[0]);
  658.    }
  659.  
  660.    public FontDescriptor[] getFontDescriptors(String var1, int var2) {
  661.       assert isLogicalFontFamilyName(var1);
  662.  
  663.       var1 = var1.toLowerCase(Locale.ENGLISH);
  664.       int var3 = getFontIndex(var1);
  665.       int var4 = getStyleIndex(var2);
  666.       return this.getFontDescriptors(var3, var4);
  667.    }
  668.  
  669.    private FontDescriptor[] getFontDescriptors(int var1, int var2) {
  670.       FontDescriptor[] var3 = this.fontDescriptors[var1][var2];
  671.       if (var3 == null) {
  672.          var3 = this.buildFontDescriptors(var1, var2);
  673.          this.fontDescriptors[var1][var2] = var3;
  674.       }
  675.  
  676.       return var3;
  677.    }
  678.  
  679.    private FontDescriptor[] buildFontDescriptors(int var1, int var2) {
  680.       String var10000 = fontNames[var1];
  681.       var10000 = styleNames[var2];
  682.       short[] var5 = this.getCoreScripts(var1);
  683.       short[] var6 = this.compFontNameIDs[var1][var2];
  684.       String[] var7 = new String[var5.length];
  685.       String[] var8 = new String[var5.length];
  686.  
  687.       for(int var9 = 0; var9 < var7.length; ++var9) {
  688.          var8[var9] = getComponentFontName(var6[var9]);
  689.          var7[var9] = getScriptName(var5[var9]);
  690.          if (this.alphabeticSuffix != null && "alphabetic".equals(var7[var9])) {
  691.             var7[var9] = var7[var9] + "/" + this.alphabeticSuffix;
  692.          }
  693.       }
  694.  
  695.       int[][] var16 = this.compExclusions[var1];
  696.       FontDescriptor[] var10 = new FontDescriptor[var8.length];
  697.  
  698.       for(int var11 = 0; var11 < var8.length; ++var11) {
  699.          String var12 = this.makeAWTFontName(var8[var11], var7[var11]);
  700.          String var13 = this.getEncoding(var8[var11], var7[var11]);
  701.          if (var13 == null) {
  702.             var13 = "default";
  703.          }
  704.  
  705.          CharsetEncoder var14 = this.getFontCharsetEncoder(var13.trim(), var12);
  706.          int[] var15 = var16[var11];
  707.          var10[var11] = new FontDescriptor(var12, var14, var15);
  708.       }
  709.  
  710.       return var10;
  711.    }
  712.  
  713.    protected String makeAWTFontName(String var1, String var2) {
  714.       return var1;
  715.    }
  716.  
  717.    protected abstract String getEncoding(String var1, String var2);
  718.  
  719.    private CharsetEncoder getFontCharsetEncoder(String var1, String var2) {
  720.       Object var3 = null;
  721.       Charset var7;
  722.       if (var1.equals("default")) {
  723.          var7 = (Charset)this.charsetRegistry.get(var2);
  724.       } else {
  725.          var7 = (Charset)this.charsetRegistry.get(var1);
  726.       }
  727.  
  728.       if (var7 != null) {
  729.          return var7.newEncoder();
  730.       } else {
  731.          if (!var1.startsWith("sun.awt.") && !var1.equals("default")) {
  732.             var7 = Charset.forName(var1);
  733.          } else {
  734.             Class var4 = (Class)AccessController.doPrivileged(new 1(this, var1));
  735.             if (var4 != null) {
  736.                try {
  737.                   var7 = (Charset)var4.newInstance();
  738.                } catch (Exception var6) {
  739.                }
  740.             }
  741.          }
  742.  
  743.          if (var7 == null) {
  744.             var7 = this.getDefaultFontCharset(var2);
  745.          }
  746.  
  747.          if (var1.equals("default")) {
  748.             this.charsetRegistry.put(var2, var7);
  749.          } else {
  750.             this.charsetRegistry.put(var1, var7);
  751.          }
  752.  
  753.          return var7.newEncoder();
  754.       }
  755.    }
  756.  
  757.    protected abstract Charset getDefaultFontCharset(String var1);
  758.  
  759.    public HashSet<String> getAWTFontPathSet() {
  760.       return null;
  761.    }
  762.  
  763.    public CompositeFontDescriptor[] get2DCompositeFontInfo() {
  764.       CompositeFontDescriptor[] var1 = new CompositeFontDescriptor[20];
  765.       String var2 = this.environment.getDefaultFontFile();
  766.       String var3 = this.environment.getDefaultFontFaceName();
  767.  
  768.       for(int var4 = 0; var4 < 5; ++var4) {
  769.          String var5 = publicFontNames[var4];
  770.          int[][] var6 = this.compExclusions[var4];
  771.          int var7 = 0;
  772.  
  773.          for(int var8 = 0; var8 < var6.length; ++var8) {
  774.             var7 += var6[var8].length;
  775.          }
  776.  
  777.          int[] var22 = new int[var7];
  778.          int[] var9 = new int[var6.length];
  779.          int var10 = 0;
  780.          boolean var11 = false;
  781.  
  782.          for(int var12 = 0; var12 < var6.length; ++var12) {
  783.             int[] var13 = var6[var12];
  784.  
  785.             for(int var14 = 0; var14 < var13.length; var22[var10++] = var13[var14++]) {
  786.                int var10000 = var13[var14];
  787.                var22[var10++] = var13[var14++];
  788.             }
  789.  
  790.             var9[var12] = var10;
  791.          }
  792.  
  793.          for(int var24 = 0; var24 < 4; ++var24) {
  794.             int var25 = this.compFontNameIDs[var4][var24].length;
  795.             boolean var27 = false;
  796.             if (installedFallbackFontFiles != null) {
  797.                var25 += installedFallbackFontFiles.length;
  798.             }
  799.  
  800.             String var15 = var5 + "." + styleNames[var24];
  801.             String[] var16 = new String[var25];
  802.             String[] var17 = new String[var25];
  803.  
  804.             int var18;
  805.             for(var18 = 0; var18 < this.compFontNameIDs[var4][var24].length; ++var18) {
  806.                short var19 = this.compFontNameIDs[var4][var24][var18];
  807.                short var20 = getComponentFileID(var19);
  808.                var16[var18] = this.getFaceNameFromComponentFontName(getComponentFontName(var19));
  809.                var17[var18] = this.mapFileName(getComponentFileName(var20));
  810.                if (var17[var18] == null || this.needToSearchForFile(var17[var18])) {
  811.                   var17[var18] = this.getFileNameFromComponentFontName(getComponentFontName(var19));
  812.                }
  813.  
  814.                if (!var27 && var2.equals(var17[var18])) {
  815.                   var27 = true;
  816.                }
  817.             }
  818.  
  819.             if (!var27) {
  820.                int var28 = 0;
  821.                if (installedFallbackFontFiles != null) {
  822.                   var28 = installedFallbackFontFiles.length;
  823.                }
  824.  
  825.                if (var18 + var28 == var25) {
  826.                   String[] var32 = new String[var25 + 1];
  827.                   System.arraycopy(var16, 0, var32, 0, var18);
  828.                   var16 = var32;
  829.                   String[] var21 = new String[var25 + 1];
  830.                   System.arraycopy(var17, 0, var21, 0, var18);
  831.                   var17 = var21;
  832.                }
  833.  
  834.                var16[var18] = var3;
  835.                var17[var18] = var2;
  836.                ++var18;
  837.             }
  838.  
  839.             if (installedFallbackFontFiles != null) {
  840.                for(int var29 = 0; var29 < installedFallbackFontFiles.length; ++var29) {
  841.                   var16[var18] = null;
  842.                   var17[var18] = installedFallbackFontFiles[var29];
  843.                   ++var18;
  844.                }
  845.             }
  846.  
  847.             if (var18 < var25) {
  848.                String[] var30 = new String[var18];
  849.                System.arraycopy(var16, 0, var30, 0, var18);
  850.                var16 = var30;
  851.                String[] var33 = new String[var18];
  852.                System.arraycopy(var17, 0, var33, 0, var18);
  853.                var17 = var33;
  854.             }
  855.  
  856.             int[] var31 = var9;
  857.             if (var18 != var9.length) {
  858.                int var34 = var9.length;
  859.                var31 = new int[var18];
  860.                System.arraycopy(var9, 0, var31, 0, var34);
  861.  
  862.                for(int var35 = var34; var35 < var18; ++var35) {
  863.                   var31[var35] = var22.length;
  864.                }
  865.             }
  866.  
  867.             var1[var4 * 4 + var24] = new CompositeFontDescriptor(var15, this.compCoreNum[var4], var16, var17, var22, var31);
  868.          }
  869.       }
  870.  
  871.       return var1;
  872.    }
  873.  
  874.    protected abstract String getFaceNameFromComponentFontName(String var1);
  875.  
  876.    protected abstract String getFileNameFromComponentFontName(String var1);
  877.  
  878.    public boolean needToSearchForFile(String var1) {
  879.       SunGraphicsEnvironment var10000 = this.environment;
  880.       if (!SunGraphicsEnvironment.isLinux) {
  881.          return false;
  882.       } else {
  883.          if (this.existsMap == null) {
  884.             this.existsMap = new HashMap();
  885.          }
  886.  
  887.          Boolean var2 = (Boolean)this.existsMap.get(var1);
  888.          if (var2 == null) {
  889.             this.getNumberCoreFonts();
  890.             if (!this.coreFontFileNames.contains(var1)) {
  891.                var2 = Boolean.TRUE;
  892.             } else {
  893.                var2 = (new File(var1)).exists();
  894.                this.existsMap.put(var1, var2);
  895.                if (SunGraphicsEnvironment.debugFonts && var2 == Boolean.FALSE) {
  896.                   logger.warning("Couldn't locate font file " + var1);
  897.                }
  898.             }
  899.          }
  900.  
  901.          return var2 == Boolean.FALSE;
  902.       }
  903.    }
  904.  
  905.    public int getNumberCoreFonts() {
  906.       if (this.numCoreFonts == -1) {
  907.          this.numCoreFonts = this.coreFontNameIDs.size();
  908.          Short[] var1 = new Short[0];
  909.          Short[] var2 = (Short[])this.coreFontNameIDs.toArray(var1);
  910.          Short[] var3 = (Short[])this.fallbackFontNameIDs.toArray(var1);
  911.          int var4 = 0;
  912.  
  913.          for(int var5 = 0; var5 < var3.length; ++var5) {
  914.             if (this.coreFontNameIDs.contains(var3[var5])) {
  915.                var3[var5] = null;
  916.             } else {
  917.                ++var4;
  918.             }
  919.          }
  920.  
  921.          this.componentFonts = new String[this.numCoreFonts + var4];
  922.          Object var6 = null;
  923.  
  924.          int var10;
  925.          for(var10 = 0; var10 < var2.length; ++var10) {
  926.             short var7 = var2[var10];
  927.             short var8 = getComponentFileID(var7);
  928.             this.componentFonts[var10] = getComponentFontName(var7);
  929.             String var9 = getComponentFileName(var8);
  930.             if (var9 != null) {
  931.                this.coreFontFileNames.add(var9);
  932.             }
  933.  
  934.             this.filenamesMap.put(this.componentFonts[var10], this.mapFileName(var9));
  935.          }
  936.  
  937.          for(int var11 = 0; var11 < var3.length; ++var11) {
  938.             if (var3[var11] != null) {
  939.                short var12 = var3[var11];
  940.                short var13 = getComponentFileID(var12);
  941.                this.componentFonts[var10] = getComponentFontName(var12);
  942.                this.filenamesMap.put(this.componentFonts[var10], this.mapFileName(getComponentFileName(var13)));
  943.                ++var10;
  944.             }
  945.          }
  946.       }
  947.  
  948.       return this.numCoreFonts;
  949.    }
  950.  
  951.    public String[] getPlatformFontNames() {
  952.       if (this.numCoreFonts == -1) {
  953.          this.getNumberCoreFonts();
  954.       }
  955.  
  956.       return this.componentFonts;
  957.    }
  958.  
  959.    public String getFileNameFromPlatformName(String var1) {
  960.       return (String)this.filenamesMap.get(var1);
  961.    }
  962.  
  963.    public String getExtraFontPath() {
  964.       return getString(head[16]);
  965.    }
  966.  
  967.    public String getVersion() {
  968.       return getString(head[17]);
  969.    }
  970.  
  971.    protected static FontConfiguration getFontConfiguration() {
  972.       return fontConfig;
  973.    }
  974.  
  975.    private static void sanityCheck() {
  976.       int var0 = 0;
  977.       String var1 = (String)AccessController.doPrivileged(new 2());
  978.  
  979.       for(int var2 = 1; var2 < table_filenames.length; ++var2) {
  980.          if (table_filenames[var2] == -1) {
  981.             System.out.println("\n Warning: <filename." + getString(table_componentFontNameIDs[var2]) + "> entry is missing!!!");
  982.             if (!var1.contains("Linux")) {
  983.                ++var0;
  984.             }
  985.          }
  986.       }
  987.  
  988.       for(int var8 = 0; var8 < table_scriptIDs.length; ++var8) {
  989.          short var3 = table_scriptFonts[var8];
  990.          if (var3 == 0) {
  991.             System.out.println("\n Error: <allfonts." + getString(table_scriptIDs[var8]) + "> entry is missing!!!");
  992.             ++var0;
  993.          } else if (var3 < 0) {
  994.             var3 = (short)(-var3);
  995.  
  996.             for(int var4 = 0; var4 < 5; ++var4) {
  997.                for(int var5 = 0; var5 < 4; ++var5) {
  998.                   int var6 = var4 * 4 + var5;
  999.                   short var7 = table_scriptFonts[var3 + var6];
  1000.                   if (var7 == 0) {
  1001.                      System.out.println("\n Error: <" + getFontName(var4) + "." + getStyleName(var5) + "." + getString(table_scriptIDs[var8]) + "> entry is missing!!!");
  1002.                      ++var0;
  1003.                   }
  1004.                }
  1005.             }
  1006.          }
  1007.       }
  1008.  
  1009.       if ("SunOS".equals(var1)) {
  1010.          for(int var9 = 0; var9 < table_awtfontpaths.length; ++var9) {
  1011.             if (table_awtfontpaths[var9] == 0) {
  1012.                String var11 = getString(table_scriptIDs[var9]);
  1013.                if (!var11.contains("lucida") && !var11.contains("dingbats") && !var11.contains("symbol")) {
  1014.                   System.out.println("\nError: <awtfontpath." + var11 + "> entry is missing!!!");
  1015.                   ++var0;
  1016.                }
  1017.             }
  1018.          }
  1019.       }
  1020.  
  1021.       if (var0 != 0) {
  1022.          System.out.println("!!THERE ARE " + var0 + " ERROR(S) IN " + "THE FONTCONFIG FILE, PLEASE CHECK ITS CONTENT!!\n");
  1023.          System.exit(1);
  1024.       }
  1025.  
  1026.    }
  1027.  
  1028.    private static void dump() {
  1029.       System.out.println("\n----Head Table------------");
  1030.  
  1031.       for(int var0 = 0; var0 < 20; ++var0) {
  1032.          System.out.println("  " + var0 + " : " + head[var0]);
  1033.       }
  1034.  
  1035.       System.out.println("\n----scriptIDs-------------");
  1036.       printTable(table_scriptIDs, 0);
  1037.       System.out.println("\n----scriptFonts----------------");
  1038.  
  1039.       for(int var6 = 0; var6 < table_scriptIDs.length; ++var6) {
  1040.          short var1 = table_scriptFonts[var6];
  1041.          if (var1 >= 0) {
  1042.             System.out.println("  allfonts." + getString(table_scriptIDs[var6]) + "=" + getString(table_componentFontNameIDs[var1]));
  1043.          }
  1044.       }
  1045.  
  1046.       for(int var7 = 0; var7 < table_scriptIDs.length; ++var7) {
  1047.          short var15 = table_scriptFonts[var7];
  1048.          if (var15 < 0) {
  1049.             var15 = (short)(-var15);
  1050.  
  1051.             for(int var2 = 0; var2 < 5; ++var2) {
  1052.                for(int var3 = 0; var3 < 4; ++var3) {
  1053.                   int var4 = var2 * 4 + var3;
  1054.                   short var5 = table_scriptFonts[var15 + var4];
  1055.                   System.out.println("  " + getFontName(var2) + "." + getStyleName(var3) + "." + getString(table_scriptIDs[var7]) + "=" + getString(table_componentFontNameIDs[var5]));
  1056.                }
  1057.             }
  1058.          }
  1059.       }
  1060.  
  1061.       System.out.println("\n----elcIDs----------------");
  1062.       printTable(table_elcIDs, 0);
  1063.       System.out.println("\n----sequences-------------");
  1064.  
  1065.       for(int var8 = 0; var8 < table_elcIDs.length; ++var8) {
  1066.          System.out.println("  " + var8 + "/" + getString(table_elcIDs[var8]));
  1067.          short[] var17 = getShortArray(table_sequences[var8 * 5 + 0]);
  1068.  
  1069.          for(int var19 = 0; var19 < var17.length; ++var19) {
  1070.             System.out.println("     " + getString(table_scriptIDs[var17[var19]]));
  1071.          }
  1072.       }
  1073.  
  1074.       System.out.println("\n----fontfileNameIDs-------");
  1075.       printTable(table_fontfileNameIDs, 0);
  1076.       System.out.println("\n----componentFontNameIDs--");
  1077.       printTable(table_componentFontNameIDs, 1);
  1078.       System.out.println("\n----filenames-------------");
  1079.  
  1080.       for(int var9 = 0; var9 < table_filenames.length; ++var9) {
  1081.          if (table_filenames[var9] == -1) {
  1082.             System.out.println("  " + var9 + " : null");
  1083.          } else {
  1084.             System.out.println("  " + var9 + " : " + getString(table_fontfileNameIDs[table_filenames[var9]]));
  1085.          }
  1086.       }
  1087.  
  1088.       System.out.println("\n----awtfontpaths---------");
  1089.  
  1090.       for(int var10 = 0; var10 < table_awtfontpaths.length; ++var10) {
  1091.          System.out.println("  " + getString(table_scriptIDs[var10]) + " : " + getString(table_awtfontpaths[var10]));
  1092.       }
  1093.  
  1094.       System.out.println("\n----proportionals--------");
  1095.  
  1096.       for(int var11 = 0; var11 < table_proportionals.length; ++var11) {
  1097.          System.out.println("  " + getString(table_componentFontNameIDs[table_proportionals[var11++]]) + " -> " + getString(table_componentFontNameIDs[table_proportionals[var11]]));
  1098.       }
  1099.  
  1100.       int var13 = 0;
  1101.       System.out.println("\n----alphabeticSuffix----");
  1102.  
  1103.       while(var13 < table_alphabeticSuffix.length) {
  1104.          System.out.println("    " + getString(table_elcIDs[table_alphabeticSuffix[var13++]]) + " -> " + getString(table_alphabeticSuffix[var13++]));
  1105.       }
  1106.  
  1107.       System.out.println("\n----String Table---------");
  1108.       System.out.println("    stringID:    Num =" + table_stringIDs.length);
  1109.       System.out.println("    stringTable: Size=" + table_stringTable.length * 2);
  1110.       System.out.println("\n----fallbackScriptIDs---");
  1111.       short[] var18 = getShortArray(head[15]);
  1112.  
  1113.       for(int var20 = 0; var20 < var18.length; ++var20) {
  1114.          System.out.println("  " + getString(table_scriptIDs[var18[var20]]));
  1115.       }
  1116.  
  1117.       System.out.println("\n----appendedfontpath-----");
  1118.       System.out.println("  " + getString(head[16]));
  1119.       System.out.println("\n----Version--------------");
  1120.       System.out.println("  " + getString(head[17]));
  1121.    }
  1122.  
  1123.    protected static short getComponentFontID(short var0, int var1, int var2) {
  1124.       short var3 = table_scriptFonts[var0];
  1125.       return var3 >= 0 ? var3 : table_scriptFonts[-var3 + var1 * 4 + var2];
  1126.    }
  1127.  
  1128.    protected static short getComponentFontIDMotif(short var0, int var1, int var2) {
  1129.       if (table_scriptFontsMotif.length == 0) {
  1130.          return 0;
  1131.       } else {
  1132.          short var3 = table_scriptFontsMotif[var0];
  1133.          return var3 >= 0 ? var3 : table_scriptFontsMotif[-var3 + var1 * 4 + var2];
  1134.       }
  1135.    }
  1136.  
  1137.    private static int[] getExclusionRanges(short var0) {
  1138.       short var1 = table_exclusions[var0];
  1139.       if (var1 == 0) {
  1140.          return EMPTY_INT_ARRAY;
  1141.       } else {
  1142.          char[] var2 = getString(var1).toCharArray();
  1143.          int[] var3 = new int[var2.length / 2];
  1144.          int var4 = 0;
  1145.  
  1146.          for(int var5 = 0; var5 < var3.length; ++var5) {
  1147.             var3[var5] = (var2[var4++] << 16) + (var2[var4++] & '\uffff');
  1148.          }
  1149.  
  1150.          return var3;
  1151.       }
  1152.    }
  1153.  
  1154.    private static boolean contains(short[] var0, short var1, int var2) {
  1155.       for(int var3 = 0; var3 < var2; ++var3) {
  1156.          if (var0[var3] == var1) {
  1157.             return true;
  1158.          }
  1159.       }
  1160.  
  1161.       return false;
  1162.    }
  1163.  
  1164.    protected static String getComponentFontName(short var0) {
  1165.       return var0 < 0 ? null : getString(table_componentFontNameIDs[var0]);
  1166.    }
  1167.  
  1168.    private static String getComponentFileName(short var0) {
  1169.       return var0 < 0 ? null : getString(table_fontfileNameIDs[var0]);
  1170.    }
  1171.  
  1172.    private static short getComponentFileID(short var0) {
  1173.       return table_filenames[var0];
  1174.    }
  1175.  
  1176.    private static String getScriptName(short var0) {
  1177.       return getString(table_scriptIDs[var0]);
  1178.    }
  1179.  
  1180.    protected short[] getCoreScripts(int var1) {
  1181.       short var2 = this.getInitELC();
  1182.       short[] var3 = getShortArray(table_sequences[var2 * 5 + var1]);
  1183.       if (this.preferLocaleFonts) {
  1184.          if (this.reorderScripts == null) {
  1185.             this.reorderScripts = new HashMap();
  1186.          }
  1187.  
  1188.          String[] var4 = new String[var3.length];
  1189.  
  1190.          for(int var5 = 0; var5 < var4.length; ++var5) {
  1191.             var4[var5] = getScriptName(var3[var5]);
  1192.             this.reorderScripts.put(var4[var5], var3[var5]);
  1193.          }
  1194.  
  1195.          this.reorderSequenceForLocale(var4);
  1196.  
  1197.          for(int var6 = 0; var6 < var4.length; ++var6) {
  1198.             var3[var6] = (Short)this.reorderScripts.get(var4[var6]);
  1199.          }
  1200.       }
  1201.  
  1202.       return var3;
  1203.    }
  1204.  
  1205.    private static short[] getFallbackScripts() {
  1206.       return getShortArray(head[15]);
  1207.    }
  1208.  
  1209.    private static void printTable(short[] var0, int var1) {
  1210.       for(int var2 = var1; var2 < var0.length; ++var2) {
  1211.          System.out.println("  " + var2 + " : " + getString(var0[var2]));
  1212.       }
  1213.  
  1214.    }
  1215.  
  1216.    private static short[] readShortTable(DataInputStream var0, int var1) throws IOException {
  1217.       if (var1 == 0) {
  1218.          return EMPTY_SHORT_ARRAY;
  1219.       } else {
  1220.          short[] var2 = new short[var1];
  1221.          byte[] var3 = new byte[var1 * 2];
  1222.          var0.read(var3);
  1223.          int var4 = 0;
  1224.  
  1225.          for(int var5 = 0; var4 < var1; var2[var4++] = (short)(var3[var5++] << 8 | var3[var5++] & 255)) {
  1226.          }
  1227.  
  1228.          return var2;
  1229.       }
  1230.    }
  1231.  
  1232.    private static void writeShortTable(DataOutputStream var0, short[] var1) throws IOException {
  1233.       for(int var2 = 0; var2 < var1.length; ++var2) {
  1234.          var0.writeShort(var1[var2]);
  1235.       }
  1236.  
  1237.    }
  1238.  
  1239.    private static short[] toList(HashMap var0) {
  1240.       short[] var1 = new short[var0.size()];
  1241.  
  1242.       for(int var2 = 0; var2 < var1.length; ++var2) {
  1243.          var1[var2] = -1;
  1244.       }
  1245.  
  1246.       for(Map.Entry var3 : var0.entrySet()) {
  1247.          var1[(Short)var3.getValue()] = getStringID((String)var3.getKey());
  1248.       }
  1249.  
  1250.       return var1;
  1251.    }
  1252.  
  1253.    protected static String getString(short var0) {
  1254.       if (var0 == 0) {
  1255.          return null;
  1256.       } else {
  1257.          if (stringCache[var0] == null) {
  1258.             stringCache[var0] = new String(table_stringTable, table_stringIDs[var0], table_stringIDs[var0 + 1] - table_stringIDs[var0]);
  1259.          }
  1260.  
  1261.          return stringCache[var0];
  1262.       }
  1263.    }
  1264.  
  1265.    private static short[] getShortArray(short var0) {
  1266.       String var1 = getString(var0);
  1267.       char[] var2 = var1.toCharArray();
  1268.       short[] var3 = new short[var2.length];
  1269.  
  1270.       for(int var4 = 0; var4 < var2.length; ++var4) {
  1271.          var3[var4] = (short)(var2[var4] & '\uffff');
  1272.       }
  1273.  
  1274.       return var3;
  1275.    }
  1276.  
  1277.    private static short getStringID(String var0) {
  1278.       if (var0 == null) {
  1279.          return 0;
  1280.       } else {
  1281.          short var1 = (short)stringTable.length();
  1282.          stringTable.append(var0);
  1283.          short var2 = (short)stringTable.length();
  1284.          stringIDs[stringIDNum] = var1;
  1285.          stringIDs[stringIDNum + 1] = var2;
  1286.          ++stringIDNum;
  1287.          if (stringIDNum + 1 >= stringIDs.length) {
  1288.             short[] var3 = new short[stringIDNum + 1000];
  1289.             System.arraycopy(stringIDs, 0, var3, 0, stringIDNum);
  1290.             stringIDs = var3;
  1291.          }
  1292.  
  1293.          return (short)(stringIDNum - 1);
  1294.       }
  1295.    }
  1296.  
  1297.    private static short getShortArrayID(short[] var0) {
  1298.       char[] var1 = new char[var0.length];
  1299.  
  1300.       for(int var2 = 0; var2 < var0.length; ++var2) {
  1301.          var1[var2] = (char)var0[var2];
  1302.       }
  1303.  
  1304.       String var3 = new String(var1);
  1305.       return getStringID(var3);
  1306.    }
  1307.  
  1308.    // $FF: synthetic method
  1309.    static short[] access$002(short[] var0) {
  1310.       head = var0;
  1311.       return var0;
  1312.    }
  1313.  
  1314.    // $FF: synthetic method
  1315.    static short[] access$000() {
  1316.       return head;
  1317.    }
  1318.  
  1319.    // $FF: synthetic method
  1320.    static short[] access$102(short[] var0) {
  1321.       table_scriptIDs = var0;
  1322.       return var0;
  1323.    }
  1324.  
  1325.    // $FF: synthetic method
  1326.    static short[] access$200(HashMap var0) {
  1327.       return toList(var0);
  1328.    }
  1329.  
  1330.    // $FF: synthetic method
  1331.    static short[] access$100() {
  1332.       return table_scriptIDs;
  1333.    }
  1334.  
  1335.    // $FF: synthetic method
  1336.    static short[] access$302(short[] var0) {
  1337.       table_scriptFonts = var0;
  1338.       return var0;
  1339.    }
  1340.  
  1341.    // $FF: synthetic method
  1342.    static short[] access$300() {
  1343.       return table_scriptFonts;
  1344.    }
  1345.  
  1346.    // $FF: synthetic method
  1347.    static short[] access$402(short[] var0) {
  1348.       table_elcIDs = var0;
  1349.       return var0;
  1350.    }
  1351.  
  1352.    // $FF: synthetic method
  1353.    static short[] access$400() {
  1354.       return table_elcIDs;
  1355.    }
  1356.  
  1357.    // $FF: synthetic method
  1358.    static short[] access$502(short[] var0) {
  1359.       table_sequences = var0;
  1360.       return var0;
  1361.    }
  1362.  
  1363.    // $FF: synthetic method
  1364.    static short[] access$500() {
  1365.       return table_sequences;
  1366.    }
  1367.  
  1368.    // $FF: synthetic method
  1369.    static short[] access$602(short[] var0) {
  1370.       table_fontfileNameIDs = var0;
  1371.       return var0;
  1372.    }
  1373.  
  1374.    // $FF: synthetic method
  1375.    static short[] access$600() {
  1376.       return table_fontfileNameIDs;
  1377.    }
  1378.  
  1379.    // $FF: synthetic method
  1380.    static short[] access$702(short[] var0) {
  1381.       table_componentFontNameIDs = var0;
  1382.       return var0;
  1383.    }
  1384.  
  1385.    // $FF: synthetic method
  1386.    static short[] access$700() {
  1387.       return table_componentFontNameIDs;
  1388.    }
  1389.  
  1390.    // $FF: synthetic method
  1391.    static short[] access$802(short[] var0) {
  1392.       table_filenames = var0;
  1393.       return var0;
  1394.    }
  1395.  
  1396.    // $FF: synthetic method
  1397.    static short[] access$800() {
  1398.       return table_filenames;
  1399.    }
  1400.  
  1401.    // $FF: synthetic method
  1402.    static short[] access$902(short[] var0) {
  1403.       table_exclusions = var0;
  1404.       return var0;
  1405.    }
  1406.  
  1407.    // $FF: synthetic method
  1408.    static short[] access$900() {
  1409.       return table_exclusions;
  1410.    }
  1411.  
  1412.    // $FF: synthetic method
  1413.    static short access$1000(String var0) {
  1414.       return getStringID(var0);
  1415.    }
  1416.  
  1417.    // $FF: synthetic method
  1418.    static short[] access$1102(short[] var0) {
  1419.       table_proportionals = var0;
  1420.       return var0;
  1421.    }
  1422.  
  1423.    // $FF: synthetic method
  1424.    static short[] access$1100() {
  1425.       return table_proportionals;
  1426.    }
  1427.  
  1428.    // $FF: synthetic method
  1429.    static short[] access$1202(short[] var0) {
  1430.       table_scriptFontsMotif = var0;
  1431.       return var0;
  1432.    }
  1433.  
  1434.    // $FF: synthetic method
  1435.    static short[] access$1200() {
  1436.       return table_scriptFontsMotif;
  1437.    }
  1438.  
  1439.    // $FF: synthetic method
  1440.    static short[] access$1300() {
  1441.       return EMPTY_SHORT_ARRAY;
  1442.    }
  1443.  
  1444.    // $FF: synthetic method
  1445.    static short[] access$1402(short[] var0) {
  1446.       table_alphabeticSuffix = var0;
  1447.       return var0;
  1448.    }
  1449.  
  1450.    // $FF: synthetic method
  1451.    static short[] access$1400() {
  1452.       return table_alphabeticSuffix;
  1453.    }
  1454.  
  1455.    // $FF: synthetic method
  1456.    static short access$1500(short[] var0) {
  1457.       return getShortArrayID(var0);
  1458.    }
  1459.  
  1460.    // $FF: synthetic method
  1461.    static short[] access$1602(short[] var0) {
  1462.       table_stringIDs = var0;
  1463.       return var0;
  1464.    }
  1465.  
  1466.    // $FF: synthetic method
  1467.    static short access$1700() {
  1468.       return stringIDNum;
  1469.    }
  1470.  
  1471.    // $FF: synthetic method
  1472.    static short[] access$1800() {
  1473.       return stringIDs;
  1474.    }
  1475.  
  1476.    // $FF: synthetic method
  1477.    static short[] access$1600() {
  1478.       return table_stringIDs;
  1479.    }
  1480.  
  1481.    // $FF: synthetic method
  1482.    static char[] access$1902(char[] var0) {
  1483.       table_stringTable = var0;
  1484.       return var0;
  1485.    }
  1486.  
  1487.    // $FF: synthetic method
  1488.    static StringBuilder access$2000() {
  1489.       return stringTable;
  1490.    }
  1491.  
  1492.    // $FF: synthetic method
  1493.    static String[] access$2102(String[] var0) {
  1494.       stringCache = var0;
  1495.       return var0;
  1496.    }
  1497.  
  1498.    // $FF: synthetic method
  1499.    static int[] access$2200() {
  1500.       return EMPTY_INT_ARRAY;
  1501.    }
  1502.  
  1503.    // $FF: synthetic method
  1504.    static Logger access$2300() {
  1505.       return logger;
  1506.    }
  1507.  
  1508.    // $FF: synthetic method
  1509.    static String[] access$2500() {
  1510.       return EMPTY_STRING_ARRAY;
  1511.    }
  1512.  
  1513.    // $FF: synthetic method
  1514.    static Vector access$2600(String var0) {
  1515.       return splitSequence(var0);
  1516.    }
  1517. }
  1518.